package designPrinciple.liskov;

public class Liskov2 {
    public static void main(String[] args) {
        A2 a = new A2();
        System.out.println("11-3 " + a.func1(11,3));
        System.out.println("1-8 " + a.func1(1,8));
        System.out.println("--------------------------------");

        //因为这里B2不再是A2的子类了，因此func1的本意就不会是减法了
        B2 b = new B2();
        System.out.println("11+3 " + b.func1(11,3));
        System.out.println("1+8 " + b.func1(1,8));

        //使用组合的方式调用A2
        System.out.println("11-3 " + b.func3(11,3));
    }
}


//创建一个基础类
class Base{

}

//A2类
class A2 extends Base{

    public int func1(int a,int b){
        return a-b;
    }

}


//B2类

class B2 extends Base{
    private A2 a = new A2();

    public int func1(int a,int b){
        return a+b;
    }

    public int func2(int a,int b){
        return func1(a,b)+9;
    }

    //如果说，还想用到A2的方法，可以通过组合的方式去使用。相比之前，降低了耦合度
    public int func3(int a,int b){
        return this.a.func1(a,b);
    }
}
